18. SQL
本节只是对 SQL 的简要介绍,内容比较散乱不成体系,阅读时还请留意。
关系数据库(Relational Database) 通过表格来组织其包含的数据;而表格由若干条 记录(Record) 组成,表格的每一列都有一个名字与关联的属性,每一行记录在每一列中都有一个值。
结构化查询语言(Strctured Query Language,SQL) 是目前最为流行的用于对关系数据库进行增删改查操作的编程语言。SQL 是一种 声明式语言(Declarative Language),程序是对所需结果的描述,如何得到该结果则由编译器自行决定。
SQL 的基本语法与关键字如下:
SELECT语句创建一个新表。SELECT语句接受若干个由空格分隔的列描述符。- 列描述符具有多种形式:
- 其基本形式形如
<columns> FROM <table> [WHERE <condition>] [ORDER BY <order>] [GROUP BY <expression>] [HAVING <expression>]依据已经创建的表格,选择某些特定的行,进行一些过滤与排序操作后得到新的表,该新表同时依据某些条件进行分类,其中只有满足条件的组被保留。 *是一种 通配符(globbing),代表所有的列。- 选择的列与来源表格可以通过
<expression> AS <name>进行别称。与 C 和 Java 类似,可以通过点表达式<table>.<column>选择某个表格的某一列。 <condition>与<order>本质上也是表达式。表达式可以进行算术运算,可以包含对内置函数的调用。- 运算符
||可以将两个字符串拼接在一起。
- 其基本形式形如
CREATE TABLE语句为表赋予一个全局名称。格式为CREATE TABLE <name>[(<column> [<attr>] [DEFAULT <default>],...)] as <expression>。DROP TABLE删除一个表。UNION语句将两个表头结构相同的表联合在一起。- 表头结构不同的表格可以通过多种方式组合形成新的表:
,符号将计算出来自不同表格的各列能够组合出的所有有序对以得到新表。
示例
CREATE TABLE odds AS
SELECT 'one' AS name, 1 AS value UNION
SELECT 'three' , 3;
CREATE TABLE evens AS
SELECT 'two' AS name, 2 AS value UNION
SELECT 'four' , 4;
SELECT * FROM odds, evens;
┌───────┬───────┬──────┬───────┐
│ name │ value │ name │ value │
├───────┼───────┼──────┼───────┤
│ one │ 1 │ four │ 4 │
│ one │ 1 │ two │ 2 │
│ three │ 3 │ four │ 4 │
│ three │ 3 │ two │ 2 │
└───────┴───────┴──────┴───────┘
- SQL 中内置了大量的 聚合函数(Aggregate Functions),其接受一些包含多行的组并为每个组计算出一个结果。常见的聚合函数有求和函数
sum(),最大最小值函数max()与min(),平均值函数avg()与计算行数函数count()。聚合函数进行运算时不是仅仅选中了特定行的特定列中的元素,而是直接选中了整行。这样有时可以得到有意义的结果,有时得到的结果却没有任何意义。 DISTINCT关键字修饰一个表格可以去除该表格中所有重复元素。INSERT向表格中插入元素,格式一般为INSERT INTO <table>[(<columns>)] VALUES (<rows>),...。UPDATE修改表格中的元素,格式一般为UPDATE <table> SET <column> = <expression> [WHERE <condition>]。DELETE删除表格中的一些行,格式一般为DELETE FROM <table> [WHERE <condition>。
所有涉及删除的操作都十分危险,请在执行这类操作前务必三思而后行。
Python 内置了 sqlite3 库允许 Python 程序与 SQLite 数据库进行交互。